#include<iostream>
#include<unistd.h>

// void* thread_task(void* arg)
// {
//     //注意需要强转回来
//     std::cout<<(char*)arg<<std::endl;
//     //注意函数是有返回值的
//     return NULL;
// }

struct Person
{
    Person(const char* ptr,int age)
    :_ptr(ptr),_age(age)
    {}

    const char*_ptr;
    int _age;
};

void* thread_task(void* arg)
{
    //注意需要强转回来
    struct Person* ptr=(struct Person*)arg;

    //注意函数是有返回值的
    return (void*)new struct Person(ptr->_ptr,ptr->_age);
}

int main()
{
    //获取线程ID
    pthread_t id;
    //创建一个线程
    Person person("小明",18);
    pthread_create(&id,NULL,thread_task,(void*)&person);
    //接收参数
    void* arg_ptr;
    //阻塞等待子线程结束
    pthread_join(id,&arg_ptr);
    //明确等待线程与返回值位置
    std::cout<<(((struct Person*)arg_ptr)->_ptr)<<std::endl;
    std::cout<<(((struct Person*)arg_ptr)->_age)<<std::endl;

    //std::cout<<"线程:"<<tid<<std::endl;
    //std::cout<<"进程:"<<getpid()<<std::endl;
    //sleep(100);
    //const char *ptr = "Hello pthread";

    return 0;
}